package com.controller;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.UsersEntity;
import com.service.TokenService;
import com.service.UsersService;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Arrays;
import java.util.Map;

/**
 * author 王瑞
 * 任务：管理员登录
 * 备注：
 *
 * @date 2023/5/22$ 21:38$
 ***/
    @RequestMapping("users")
    @RestController
    public class UsersController{

        @Autowired
        private UsersService userService;

        @Autowired
        private TokenService tokenService;

        /**
         * 登录
         */
        @IgnoreAuth
        @RequestMapping(value = "/login")
        public R login(String username, String password, String captcha, HttpServletRequest request) {
            UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
            if(user==null || !user.getPassword().equals(password)) {
                return R.error("账号或密码不正确");
            }
            String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
            return R.ok().put("token", token);
        }

        /**
         * 注册
         */
        @IgnoreAuth
        @PostMapping(value = "/register")
        public R register(@RequestBody UsersEntity user){
//    	ValidatorUtils.validateEntity(user);
            if(userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) !=null) {
                return R.error("用户已存在");
            }
            userService.insert(user);
            return R.ok();
        }

        /**
         * 退出
         */
        @GetMapping(value = "logout")
        public R logout(HttpServletRequest request) {
            request.getSession().invalidate();
            return R.ok("退出成功");
        }

        /**
         * 密码重置
         */
        @IgnoreAuth
        @RequestMapping(value = "/resetPass")
        public R resetPass(String username, HttpServletRequest request){
            UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
            if(user==null) {
                return R.error("账号不存在");
            }
            user.setPassword("123456");
            userService.update(user,null);
            return R.ok("密码已重置为：123456");
        }

        /**
         * 列表
         */
        @RequestMapping("/page")
        public R page(@RequestParam Map<String, Object> params, UsersEntity user){
            EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();
            PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
            return R.ok().put("data", page);
        }

        /**
         * 列表
         */
        @RequestMapping("/list")
        public R list( UsersEntity user){
            EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();
            ew.allEq(MPUtil.allEQMapPre( user, "user"));
            return R.ok().put("data", userService.selectListView(ew));
        }

        /**
         * 信息
         */
        @RequestMapping("/info/{id}")
        public R info(@PathVariable("id") String id){
            UsersEntity user = userService.selectById(id);
            return R.ok().put("data", user);
        }

        /**
         * 获取用户的session用户信息
         */
        @RequestMapping("/session")
        public R getCurrUser(HttpServletRequest request){
            Long id = (Long)request.getSession().getAttribute("userId");
            UsersEntity user = userService.selectById(id);
            return R.ok().put("data", user);
        }

        /**
         * 保存
         */
        @PostMapping("/save")
        public R save(@RequestBody UsersEntity user){
//    	ValidatorUtils.validateEntity(user);
            if(userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) !=null) {
                return R.error("用户已存在");
            }
            userService.insert(user);
            return R.ok();
        }

        /**
         * 修改
         */
        @RequestMapping("/update")
        public R update(@RequestBody UsersEntity user){
//        ValidatorUtils.validateEntity(user);
            UsersEntity u = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername()));
            if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
                return R.error("用户名已存在。");
            }
            userService.updateById(user);//全部更新
            return R.ok();
        }

        /**
         * 删除
         */
        @RequestMapping("/delete")
        public R delete(@RequestBody Long[] ids){
            userService.deleteBatchIds(Arrays.asList(ids));
            return R.ok();
        }

    }
